#region OldRef
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
#endregion 

#region newRef
using Excel = Microsoft.Office.Interop.Excel;
using System.Collections;
using System.Collections.Generic;
#endregion 


public partial class _Default : System.Web.UI.Page
{


    List<Rij> rijen;
    UploadValidator uv;
    String gebruiker;
    Boolean opleidingcoordinator;
    Int32 richting;
    protected void Page_Load(object sender, EventArgs e)
    {
        SessionGebruiker sg = (SessionGebruiker)Session["login"];
        if (sg == null)
        {
            Server.Transfer("login.aspx");
        }
        else
        {
            gebruiker = sg.Gebruiker;
        }
        Databank db = Databank.DatabankInstantie;
        List<String> rollen = db.GetRollenGebruiker(gebruiker);
        List<Richting> richtingen;
        if (!Page.IsPostBack)
        {
            for (int i = 0; i < rollen.Count; i++)
            {
                if (rollen[i].Equals("opleidings coordinator"))
                {
                    opleidingcoordinator = true;
                }
            }
            if (opleidingcoordinator)
            {
                richtingen = db.GetRichtingenOpleidingscoordinator(gebruiker);
                if (richtingen.Count > 0)
                {
                    RichtigingDropDownList.Visible = true;
                    Label1.Visible = true;
                    if (RichtigingDropDownList.Items.Count > 0)
                    {
                            RichtigingDropDownList.Items.Clear();
                    }
                    RichtigingDropDownList.Items.Add(new ListItem("Eigen agenda", "0"));
                    for (int y = 0; y < richtingen.Count; y++)
                    {
                        RichtigingDropDownList.Items.Add(new ListItem(richtingen[y].Naam, richtingen[y].Id.ToString()));
                    }
                }
            }
        }
    }
    protected void uploadbutton_Click(object sender, EventArgs e)
    {
        Statuslabel.Text = "";
        
        if (FileUpload.HasFile)
        {
            if (FileUpload.PostedFile.FileName.EndsWith(".xls") || FileUpload.PostedFile.FileName.EndsWith(".xlsx"))
            {
                string locatie = AppDomain.CurrentDomain.BaseDirectory.ToString() + @"\upload\" + FileUpload.FileName;
                try
                {
                    locatie = AppDomain.CurrentDomain.BaseDirectory.ToString() + @"\upload\" + FileUpload.FileName;
                    FileUpload.SaveAs(locatie);
                    String result = "";
                    result += Inlezen(locatie);
                    if (result.Equals(""))
                    {
                        if (richting == 0)
                        {
                            uv = new UploadValidator(rijen, gebruiker);
                            result = uv.Valideer().ToString();
                            if (result.Equals(""))
                            {
                                Opslaan(gebruiker);
                            }
                        }
                        else
                        {
                            uv = new UploadValidator(rijen,richting);
                            result = uv.ValideerAgendaRichting().ToString();
                            if (result.Equals(""))
                            {
                                OpslaanRichtingAgenda(richting); ;
                            }
                        }
                    }

                    Statuslabel.Text = result;
                }
                catch (Exception ex)
                {
                    //aanpassen
                   Statuslabel.Text = ex.Message.ToString();
                }
                finally
                {
                File.Delete(locatie);
                }
            }
            else
            {
                Statuslabel.Text = "Gelieve een excel file up te loaden";
            }
        }
        else
        {
            Statuslabel.Text = "U hebt geen bestand geselecteerd";
        }
    }
    private void OpslaanRichtingAgenda(int richtingId)
    {
        Databank db = Databank.DatabankInstantie;
        List<AgendaItem> items = uv.GetAdgendaItems();
        List<AgendaItem> test = db.GetAgendaRichting(richtingId);
        int teller = 0;
        int reedsInDb = 0;
        int deleteUitDb = 0;
        String result = "";
        for (int y = 0; y < test.Count; y++)
        {
            if (ZoekDatum(items, test[y].Datum))
            {
                reedsInDb++;
            }
            else
            {
                deleteUitDb++;
                db.DelAgendaItem(test[y].Id);

            }
        }
        if (reedsInDb != items.Count)
        {
            reedsInDb = 0;
            for (int i = 0; i < items.Count; i++)
            {
                if (ZoekDatum(test, items[i].Datum))
                {
                    reedsInDb++;
                }
                else
                {
                    db.AddAgendaItemRichting(items[i], richtingId);
                    teller++;
                }
            }
        }
        if (reedsInDb > 0)
        {
            result += "Er boven zich al " + reedsInDb + " agenda items in de databank<br />";
        }
        if (deleteUitDb > 0)
        {
            result += "Er werden " + deleteUitDb.ToString() + "verwijderd van de agenda <br />";
        }
        result += teller.ToString() + " agenda items succesvol toegevoegd <br />";
        ResultLabel.Text = result;
    }
    private Boolean ZoekDatum(List<AgendaItem> aiTemp, DateTime dt)
    {
        Boolean inArray = false;
        int i = 0;
        while (i < aiTemp.Count && !inArray)
        {
            DateTime dt1 = aiTemp[i].Datum;
            TimeSpan ts = dt1 - dt;
            if (ts.Minutes == 0)
            {
                inArray = true;
            }
            i++;
        }

        return inArray;
    }
    private void Opslaan(string gid)
    {
        Databank db = Databank.DatabankInstantie;
        List<AgendaItem> items = uv.GetAdgendaItems();
        int teller = 0;
        int reedsInDb = 0;
        String result = "";
        for (int i = 0; i < items.Count; i++)
        {
            int test = db.GetAgendaGebruiker(gid, items[i].Datum, items[i].Datum + new TimeSpan(0, items[i].AantalMin, 0)).Count;
            if ( test > 0)
            {
                // niet toevoegen
                reedsInDb++;
            }
            else
            {
                // wel toevoegen
                teller++;
                db.AddAgendaItemGebruiker(items[i], gid);
                
            }
        }
        if (reedsInDb >= 1)
        {
            result += "Er boven zich al " + reedsInDb + " agenda items in de databank<br />";
        }
         result += teller.ToString() + " agenda items succesvol toegevoegd";
         ResultLabel.Text = result;
    }
    private String Inlezen(string locatie)
    {
        String result = "";
        Reader reader = new Reader(locatie);
        int LaatsteVerTRegel = reader.FindLaatsteRegel("VERTICAAL");
        int LaatsteHorRegel = reader.FindLaatsteRegel("HORIZONTAAL");
        rijen = new List<Rij>();
        if (LaatsteVerTRegel > 0 && LaatsteHorRegel > 0)
        {
            for (int i = 2; i < LaatsteVerTRegel + 1; i++)
            {
                Rij rij = new Rij();
                for (int t = 1; t < LaatsteHorRegel + 1; t++)
                {
                    try
                    {
                        string cell = ((Excel.Range)reader.FillBereik(i, t)).Value2.ToString(); ;
                        switch (t)
                        {
                            case 1:
                                rij.Vak = cell;
                                break;
                            case 2:
                                rij.Begindatum = DateTime.Parse(cell); ;
                                break;
                            case 3:
                                rij.Begintijd = cell;
                                break;
                            case 4:
                                rij.Einddatum = DateTime.Parse(cell);
                                break;
                            case 5:
                                rij.Eindtijd = cell;
                                break;
                            case 6:
                                rij.Gebeurtenisduurtheledag = bool.Parse(cell);
                                break;
                            default:
                                break;
                        }

                    }
                    catch
                    {
                        // Response.Write(i + " " + t + " " + DBNull.Value.ToString());
                        if (rij.Vak != null)
                        {
                            if (rij.Begindatum != null)
                            {

                                result += "Agenda item: " + rij.Vak.ToString() + " " + rij.Begindatum.ToShortDateString();
                                result += " werd niet correct ingevuld in outlook veld : ";
                                result += ((Excel.Range)reader.FillBereik(1, t)).Value2.ToString();
                                result += " ontbreekt";
                                result += "<br />";
                            }
                            else
                            {
                                result += "Agenda item: " + rij.Vak.ToString() ;
                                result += " werd niet correct ingevuld in outlook veld : ";
                                result += ((Excel.Range)reader.FillBereik(1, t)).Value2.ToString();
                                result += " ontbreekt";
                                result += "<br />";
                            }
                        }
                        else
                        {
                            result += "Agenda item: " + (i - 1);
                            result += " werd niet correct ingevuld in outlook veld : ";
                            result += ((Excel.Range)reader.FillBereik(1, t)).Value2.ToString();
                            result += " ontbreekt";
                            result += "<br />";
                        }
                    }
                    finally
                    {
                        
                    }
                }
                rijen.Add(rij);
            }
        }
        else
        {
            result += "Excel document is gewijzigd na exporteren ";
            result += "of een verkeerd file werd upgeload !";
            result += "<br />";
        }


        /*Niet vergeten*/
        reader.Sluiten();
        return result;
    }
    protected void RichtigingDropDownList_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            richting = int.Parse(RichtigingDropDownList.SelectedItem.Value);
        }
    }
}
   